let list = {
	value: 1,
	next: {
		value: 2,
		next: {
			value: 3,
			next: {
				value: 4,
				next: null,
			},
		},
	},
}

// 循环：
printReverseList(list)
function printReverseList(list) {
	let arr = []

	while (list) {
		arr.push(list.value)
		list = list.next
	}

	// 反转数组
	for (const item of arr.reverse()) console.log(item) // 4 3 2 1
}

console.log('-------')

// 递归：顺着链表，记录每一个嵌套调用里链表的元素（在执行上下文堆栈里，也就是函数体的内容），等到出口条件满足后，然后再依次输出它们。
printReverseList(list)
function printReverseList(list) {
	// 当执行这行代码时，会将当前 printReverseList 函数的子调用包括其他内容，存入到堆栈中去等待执行，所以 log 不会直接打印。
	if (list.next) printReverseList(list.next)
	console.log(list.value) // 4 3 2 1
}
